#ifndef STACK_H
#define STACK_H

#include <vector>
#include <cassert>

template<typename T>
class Stack {
private:
    std::vector<T> elems;  // 使用vector来存储栈元素

public:
    void push(const T& elem) {
        elems.push_back(elem);  // 将元素添加到向量的末尾
    }

    T pop() {
        assert(!elems.empty());  // 确保栈不为空
        T elem = elems.back();   // 获取向量的最后一个元素
        elems.pop_back();        // 移除向量的最后一个元素
        return elem;             // 返回被弹出的元素
    }

    const T& top() const {
        assert(!elems.empty());  // 确保栈不为空
        return elems.back();     // 返回向量的最后一个元素
    }

    bool empty() const {
        return elems.empty();    // 返回栈是否为空
    }
};

#endif // STACK_H